perm filename APPLY.SAI[SYS,HE]3 blob
sn#039599 filedate 1973-05-01 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00027 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 BEGIN "APPLY"
C00007 00003 α define display areas
C00010 00004 α miscelaneous dpy procedures
C00012 00005 α more misc. display routines
C00015 00006 α display outline (frame 0)
C00018 00007 α generate TV parameters (frame 6)
C00020 00008 α generate position parameters (frame 5)
C00021 00009 α generate window display (frame 7)
C00023 00010 α generate instruction area (frames 1-3,10-12)
C00026 00011 α generate operator display (frame 8)
C00028 00012 α display operator output and parameters (frame 9)
C00032 00013 α conversion from Quam format to H/E format
C00036 00014 α BEGINNING OF TVSIX PACKAGE
C00039 00015 α TVSIX REDUCTION ROUTINE
C00040 00016 α Super fast averager. SUMS and CLPINC determine the number of
C00042 00017 α read the TV camera as specified
C00044 00018 α ouput window to DDVID channel
C00047 00019 α setup TV limits for reading
C00049 00020 α read double resolution TV picture
C00051 00021 α move window
C00053 00022 α read a disk file
C00056 00023 α command table
C00059 00024 α tables containing the above magic numbers and strings
C00061 00025 α main program begins here
C00063 00026 α command loop - decode input
C00065 00027 α command case statement
C00069 ENDMK
C⊗;
BEGIN "APPLY"
REQUIRE "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "DPYOPS.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "EDGLIB[SYS,HE]" LIBRARY;
REQUIRE "HELIB[1,3]" LIBRARY;
REQUIRE "SAITRG.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "⊂⊃||" DELIMITERS;
STRING BLANKS, CHAR;
DEFINE CRLF=⊂'15&'12⊃, α=⊂COMMENT⊃, EXT=⊂EXTERNAL⊃, RF=⊂REFERENCE⊃;
EXT INTEGER IWID, LINLEN, FLINE, LLINE, LSIDE, RSIDE, TVWORD, TMAX,
BMAX, LSMAX, RSMAX;
EXT BOOLEAN STV, STVFL, ST, SLIM, HOFF, VOFF, ISEDGE, ISLINE, BCOMP,
WEAK, NOISY, NEARED, OPOOB;
EXT REAL B, TM, TP, N0SQ, S0SQ, COH, CX, CY, OPX, OPY, CIRCLE, LINWID,
OPXM, OPYM, OPXP, OPYP;
INTERNAL INTEGER DAC_ACC, AUTO_ACC, GODDT, COMDDT;
INTERNAL REAL CONF, DIFF;
INTEGER I, J, INTEG, STATUS, X, Y, FRAMES;
BOOLEAN FRACFLG, NUMFLG, OPER, CMNDFLG;
REAL FLTPNT, FRAC;
LABEL LOOP, NXT, NOIMP, ERR, TODDT, FRMDDT;
PRELOAD_WITH "CLEAR", "RED", "BLUE", "GREEN";
SAFE STRING ARRAY FILTER[1:4];
EXT INTEGER PROCEDURE DDACO(INTEGER DACR);
EXT PROCEDURE TVMOVE;
EXT PROCEDURE TVREAD;
EXT PROCEDURE CONV;
EXT PROCEDURE TVIN;
EXT PROCEDURE PICINI(INTEGER C,F,E,P;RF BOOLEAN FAIL;INTEGER ARRAY STOR);
EXT PROCEDURE PICRD(RF BOOLEAN FAIL; INTEGER ARRAY STOR);
EXT PROCEDURE INTPNT;
EXT INTEGER PROCEDURE GETPNT(INTEGER X,Y);
EXT PROCEDURE EJINIT(INTEGER SIZE);
EXT BOOLEAN PROCEDURE EJLI(INTEGER X,Y,ANGLE,FLAG);
EXT PROCEDURE PICWR(INTEGER C,F,E,P; RF BOOLEAN FAIL; INTEGER ARRAY STOR);
EXT BOOLEAN PROCEDURE DDVID(STRING CONSTR);
EXT PROCEDURE OVERL(INTEGER ARRAY DPYBUF; INTEGER N,M,L,EXP;BOOLEAN CH);
EXT INTEGER PROCEDURE JOBOK(RF INTEGER JOBNO);
EXT PROCEDURE ADJUST;
EXT INTEGER PROCEDURE GIOWD(INTEGER ARRAY A);
EXT INTEGER PROCEDURE POTABS(INTEGER CHAN; RF INTEGER FLAG);
EXT INTEGER PROCEDURE GETCOR(INTEGER SIZE);
EXT PROCEDURE RELCOR(INTEGER IOWD);
EXT INTEGER PROCEDURE SLINK(STRING NAME);
α define display areas;
DEFINE XSIZ=⊂12⊃; α x character increment;
DEFINE YSIZ=⊂24⊃; α y character increment;
DEFINE MODLIN=⊂3⊃; α # of lines in mode section;
DEFINE WINLIN=⊂21⊃; α # of lines in window section;
DEFINE OPLIN=⊂8⊃; α # of lines in operator section;
DEFINE PARWID=⊂19⊃; α # of characters in parameter section;
DEFINE BLK=⊂2⊃; α # of blank lines at top of page (for WHO);
DEFINE TOP=⊂512-BLK*YSIZ⊃; α first line of display;
α variables used to set up display;
BOOLEAN DVDTST, α TRUE if DDVID available;
EDGTST, α TRUE if edge follower available;
DRES, α TRUE if resolution doubled;
CMODE; α TRUE if camera mode;
INTEGER WX, α X coordinate of operator center;
WY, α Y coordinate of operator center;
DAC, α last dac setting;
AD, α last A-D reading;
AVE, α # of frames to average in sixbit mode;
RANG, α # of ranges in sixbit mode;
WT, α top of window;
WB, α bottom of window;
WL, α left side of window;
WR, α right side of window;
OPNUM; α operator number;
EXT INTEGER TVCAM, α camera number;
BITS, α bits per sample;
BCLIP, α bottom clip level;
TCLIP; α top clip level;
STRING FILE; α picture file name;
α set up command display;
PROCEDURE COMON;
BEGIN
ACCPOG(1);
IF CMODE THEN
BEGIN
ACCPOG(2);
IF BITS=4 THEN ACCPOG(3);
IF TVCAM=1 THEN ACCPOG(10);
END;
IF DVDTST THEN ACCPOG(11);
IF EDGTST THEN ACCPOG(12);
IF GODDT THEN ACCPOG(14);
END;
α miscelaneous dpy procedures;
α deposit string S (5 characters or less) in dpy at PNTR;
SIMPLE PROCEDURE DPYDMP(INTEGER PNTR; STRING S; INTEGER FRAM);
BEGIN
PGSEL(FRAM);
UPGMVM(CVASC(S) LOR 1, PNTR);
END;
α save location of dpy pointer;
DEFINE SAVLOC=⊂DPYPTR LAND '777777⊃;
α make string S of length N;
SIMPLE STRING PROCEDURE MAKSTR(STRING S; INTEGER N);
RETURN((S&BLANKS)[1 FOR N]);
α decimal conversion of length N;
SIMPLE STRING PROCEDURE OUTDEC(INTEGER NUM, N);
BEGIN
SETFORMAT(N,0);
RETURN(CVS(NUM)[1 FOR N]);
END;
α octal conversion of length N;
SIMPLE STRING PROCEDURE OUTOCT(INTEGER NUM, N);
BEGIN
SETFORMAT(N,0);
RETURN(CVOS(NUM)[1 FOR N]);
END;
α real conversion of length 5, fraction of length M;
SIMPLE STRING PROCEDURE OUTRL(REAL VAL; INTEGER M);
BEGIN STRING S;
SETFORMAT(6,M);
S ← CVF(VAL);
S ← IF S[1 FOR 1]=" " THEN S[2 FOR 5] ELSE S[1 FOR 5];
RETURN(S);
END;
α more misc. display routines;
SIMPLE PROCEDURE DDOCT(STRING STR;REFERENCE INTEGER SAV,NUM);
BEGIN
DPYSTR(X,Y←Y-YSIZ,MAKSTR(STR&"= ",8));
RIVECT(0,0);
DPYSST(OUTOCT(NUM,5));
SAV ← SAVLOC;
END;
SIMPLE PROCEDURE DDDEC(STRING STR;REFERENCE INTEGER SAV,NUM);
BEGIN
DPYSTR(X,Y←Y-YSIZ,MAKSTR(STR&"= ",8));
RIVECT(0,0);
DPYSST(OUTDEC(NUM,5));
SAV ← SAVLOC;
END;
SIMPLE STRING PROCEDURE DRL(REAL VAL;INTEGER N);
RETURN(IF VAL≠-1000.0 THEN OUTRL(VAL,N) ELSE " ");
SIMPLE PROCEDURE DDDEP(STRING STR; REAL NUM; INTEGER N);
DPYSTR(X,Y←Y-YSIZ,MAKSTR(STR&"= ",8)&DRL(NUM,N));
SIMPLE PROCEDURE DDDEPB(STRING STR; BOOLEAN V);
DPYSTR(X,Y←Y-YSIZ,MAKSTR(STR&"= ",8)&
(IF V THEN "TRUE " ELSE "FALSE"));
α turn on and off display frames;
DEFINE F0=⊂'400000000000⊃, F1=⊂'200000000000⊃, F2=⊂'100000000000⊃,
F3=⊂'40000000000⊃, F4=⊂'20000000000⊃, F5=⊂'10000000000⊃,
F6=⊂'4000000000⊃, F7=⊂'2000000000⊃, F8=⊂'1000000000⊃,
F9=⊂'400000000⊃, F10=⊂'200000000⊃, F11=⊂'100000000⊃,
F12=⊂'40000000⊃, F13=⊂'20000000⊃, F14=⊂'10000000⊃;
SIMPLE PROCEDURE DPYOFF(INTEGER FRAM);
BEGIN
FRAMES ← FRAMES LAND (LNOT FRAM);
ACPOGS(FRAMES);
IF CMNDFLG THEN COMON;
END;
SIMPLE PROCEDURE DPYON(INTEGER FRAM);
BEGIN
FRAMES ← FRAMES LOR FRAM;
ACPOGS(FRAMES);
IF CMNDFLG THEN COMON;
END;
α display outline (frame 0);
PROCEDURE DOUT;
BEGIN INTEGER ARRAY B[1:50];
DPYSET(B);
DPYBRT(3);
AIVECT(-512,TOP-MODLIN*YSIZ);
AVECT(-512+WINLIN*XSIZ*2,TOP-MODLIN*YSIZ);
AIVECT(-512,TOP-MODLIN*YSIZ);
RVECT(0,-WINLIN*YSIZ);
AVECT(500,TOP-(WINLIN+MODLIN)*YSIZ);
AIVECT(-512+WINLIN*XSIZ*2,TOP);
AVECT(-512+WINLIN*XSIZ*2,TOP-(MODLIN+WINLIN)*YSIZ);
AIVECT(-512+(WINLIN*2+PARWID)*XSIZ,TOP-(MODLIN+WINLIN)*YSIZ);
AVECT(-512+(WINLIN*2+PARWID)*XSIZ,TOP);
AIVECT(-512,TOP-(MODLIN+WINLIN+OPLIN)*YSIZ);
AVECT(500,TOP-(MODLIN+WINLIN+OPLIN)*YSIZ);
DPYOUT(0);
FRAMES ← FRAMES LOR F0;
END;
α display modes (frame 4);
PROCEDURE DMOD;
BEGIN INTEGER ARRAY B[1:50];
STRING S;
DPYSET(B);
DPYBRT(5);
DPYBIG(2);
S ← IF CMODE THEN "CAMERA: "&OUTDEC(TVCAM,2) ELSE "FILE: "&FILE;
DPYSTR(-512,TOP,CRLF&S&CRLF);
S ← "BITS: "&OUTDEC(BITS,2);
IF BITS=6 THEN S←S&OUTDEC(AVE,5)&"/"&OUTDEC(RANG,2);
S ← MAKSTR(S,20)&"AVAILABLE: ";
IF DVDTST THEN S←S&"DDVID" ELSE IF EDGTST THEN S←S&"EDGE" ELSE
IF GODDT THEN S←S&"DDT";
DPYSST(S&CRLF);
S ← MAKSTR("RESOLUTION: "&(IF DRES THEN "DOUBLE" ELSE "NORMAL"),25);
IF DVDTST∧EDGTST THEN S←S&"EDGE";
IF (DVDTST∨EDGTST)∧GODDT THEN S←S&" DDT";
DPYSST(S);
DPYOUT(4);
FRAMES ← FRAMES LOR F4;
END;
α generate TV parameters (frame 6);
α pointers to dpy words to be modified;
INTEGER XO, α X (octal);
XD, α X (decimal);
YO, α Y (octal);
YD, α Y (decimal);
WTO, α top of window (octal);
WBO, α bottom of window (octal);
WLO, α left side of window (octal);
WRO, α right side of window (octal);
WTD, α top of window (decimal);
WBD, α bottom of window (decimal);
WLD, α left side of window (decimal);
WRD, α right side of window (decimal);
DOPNUM, α operator number;
BC, α BCLIP;
TC, α TCLIP;
DACS, α DAC setting;
ADS; α A-D reading;
DEFINE DEPOCT(STR,SAV,NUM)=⊂DDOCT("STR",SAV,NUM)⊃,
DEPDEC(STR,SAV,NUM)=⊂DDDEC("STR",SAV,NUM)⊃,
POSIT=⊂AIVECT(X,Y←Y-YSIZ)⊃;
PROCEDURE TVPAR;
BEGIN INTEGER ARRAY B[1:50];
DPYSET(B);
DPYBRT(5);
DPYBIG(2);
X ← -512+WINLIN*XSIZ*2;
Y ← TOP-15*YSIZ;
DEPDEC(TCLIP,TC,TCLIP);
DEPDEC(BCLIP,BC,BCLIP);
DEPDEC(DAC,DACS,DAC);
DEPDEC(AD,ADS,AD);
FRAMES ← FRAMES LOR F6;
DPYOUT(6);
END;
α generate position parameters (frame 5);
PROCEDURE POSPAR;
BEGIN
INTEGER ARRAY B[1:100];
DPYSET(B);
DPYBRT(5);
DPYBIG(2);
X ← -512+WINLIN*XSIZ*2;
Y ← TOP;
POSIT;
DPYSST(" octal");
DEPOCT(X,XO,WX);
DEPOCT(Y,YO,WY);
DEPOCT(TOP,WTO,WT);
DEPOCT(BOTTOM,WBO,WB);
DEPOCT(LEFT,WLO,WL);
DEPOCT(RIGHT,WRO,WR);
POSIT;
DPYSST(" decimal");
DEPDEC(X,XD,WX);
DEPDEC(Y,YD,WY);
DEPDEC(TOP,WTD,WT);
DEPDEC(BOTTOM,WBD,WB);
DEPDEC(LEFT,WLD,WL);
DEPDEC(RIGHT,WRD,WR);
DEPDEC(OPNUM,DOPNUM,OPNUM);
FRAMES ← FRAMES LOR F5;
DPYOUT(5);
END;
α generate window display (frame 7);
PROCEDURE DWIND;
BEGIN
INTEGER ARRAY B[1:1000];
INTEGER X,Y,YY,PTR, I, J;
DPYSET(B);
DPYBRT(1);
DPYBIG(1);
Y ← 36 DIV BITS;
X ← WL-LSIDE;
I ← X DIV Y;
J ← X MOD Y;
PTR←(POINT(BITS,Y,IF J THEN J*BITS-1 ELSE -1) LAND '777777000000)+
((TVWORD+1) LAND '777777)+(WT-FLINE)*LINLEN+I;
YY ← TOP-MODLIN*YSIZ+4;
FOR Y ← WT STEP 1 UNTIL WB DO
BEGIN
AIVECT(-512,YY←YY-YSIZ);
START_CODE
LABEL L1, L2, L3, L4, L5, L6, FIXUP;
MOVEI 1,20;
MOVEI 2,5;
MOVE 3,PTR;
L1: LSH 4,7;
IORI 4,'40;
SOJG 2,L2;
PUSHJ '17,FIXUP;
L2: ILDB 5,3;
IDIVI 5,10;
ADDI 6,'60;
JUMPE 5,L3;
ADDI 5,'60;
JRST L4;
FIXUP: LSH 4,1;
IORI 4,1;
AOS DPYPTR;
MOVEM 4,@DPYPTR;
MOVEI 2,5;
POPJ '17,0;
L3: MOVEI 5,(6);
MOVEI 6,'40;
L4: LSH 4,7;
IORI 4,(5);
SOJG 2,L5;
PUSHJ '17,FIXUP;
L5: LSH 4,7;
IORI 4,(6);
SOJG 2,L6;
PUSHJ '17,FIXUP;
L6: SOJGE 1,L1;
END;
PTR ← PTR+LINLEN;
END;
FRAMES ← FRAMES LOR F7;
DPYOUT(7);
END;
α generate instruction area (frames 1-3,10-12);
PROCEDURE DINST;
BEGIN INTEGER ARRAY B[1:300];
DEFINE DPY(S)=⊂DPYSTR(X,Y←Y-YSIZ,"S")⊃;
X ← -512+(WINLIN*2+PARWID)*XSIZ;
Y ← 512;
α general commands;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| ? comp. inst. dpy|);
DPY(| M move window|);
DPY(|<n>↑ move pntr up n|);
DPY(|<n>↓ move pntr down n|);
DPY(|<n>← move pntr left n|);
DPY(|<n>→ move pntr right n|);
DPY(|<n>O apply operator n|);
DPY(|<n>C camera mode (TV n)|);
DPY(| R read a disk file|);
DPY(| nY change CONF to n|);
DPY(| nZ change DIF to n|);
DPYOUT(1);
α camera mode commands;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| S six bit images|);
DPY(| F four bit images|);
DPY(| W write window|);
DPY(| H show window|);
DPYOUT(2);
α four bit mode and camera mode;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| I double resolution|);
DPY(| N resolution←normal|);
DPY(| nB change BCLIP to n|);
DPY(| nT change TCLIP to n|);
DPYOUT(3);
α camera 1 mode;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| nD DAC←n|);
DPYOUT(10);
α DDVID available;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| V image to DDVID|);
DPYOUT(11);
α RAID available;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| X go to RAID|);
DPYOUT(14);
α EDGE available;
DPYSET(B);
DPYBRT(4);
DPYBIG(2);
DPY(| T trace line|);
DPY(| A accomodate|);
DPY(| E exit|);
DPYOUT(12);
END;
α generate operator display (frame 8);
PROCEDURE DOPOUT;
BEGIN INTEGER ARRAY B[1:200];
DEFINE XPOS(X)=⊂-512+(((X)-WL)*2+1)*XSIZ⊃,
YPOS(Y)=⊂TOP-(MODLIN+(Y)+1-WT)*YSIZ+(YSIZ DIV 2)⊃;
DPYSET(B);
DPYBRT(7);
MKCIRCLE(CIRCLE*YSIZ,XPOS(WX),YPOS(WY),25);
IF OPX≠-1000.0∧OPY≠-1000.0 THEN
BEGIN
AIVECT(XPOS(|OPX-CIRCLE*CY|),YPOS(|OPY+CIRCLE*CX|));
AVECT(XPOS(|OPX+CIRCLE*CY|),YPOS(|OPY-CIRCLE*CX|));
END;
DPYBRT(1);
IF OPXP≠-1000.0∧OPYP≠-1000.0 THEN
BEGIN
AIVECT(XPOS(|OPXP-CIRCLE*CY|),YPOS(|OPYP+CIRCLE*CX|));
AVECT(XPOS(|OPXP+CIRCLE*CY|),YPOS(|OPYP-CIRCLE*CX|));
END;
IF OPXM≠-1000.0∧OPYM≠-1000.0 THEN
BEGIN
AIVECT(XPOS(|OPXM-CIRCLE*CY|),YPOS(|OPYM+CIRCLE*CX|));
AVECT(XPOS(|OPXM+CIRCLE*CY|),YPOS(|OPYM-CIRCLE*CX|));
END;
DPYOUT(8);
FRAMES ← FRAMES LOR F8;
END;
α display operator pointer (frame 13);
PROCEDURE DPNTR;
BEGIN INTEGER ARRAY B[1:10];
INTEGER I;
STRING S;
SETFORMAT(0,0);
DPYSET(B);
DPYBRT(7);
DPYBIG(1);
S ← CVS(GETPNT(WX-LSIDE,WY-FLINE));
I ← LENGTH(S);
DPYSTR(-512+(WX-WL)*2*XSIZ+8,TOP-(1+MODLIN+WY-WT)*YSIZ+4,S);
FRAMES ← FRAMES LOR F13;
DPYOUT(13);
END;
α display operator output and parameters (frame 9);
DEFINE DEPB(STR)=⊂DDDEPB("STR",STR)⊃, DEP(STR,N)=⊂DDDEP("STR",STR,N)⊃;
PROCEDURE DOPPAR;
BEGIN INTEGER ARRAY BB[1:400];
DPYSET(BB);
DPYBRT(5);
DPYBIG(2);
X ←-500;
Y ←TOP-(MODLIN+WINLIN)*YSIZ;
DEPB(OPER);
DEPB(WEAK);
DEPB(NOISY);
DEPB(OPOOB);
DEPB(ISLINE);
DEPB(ISEDGE);
DEPB(NEARED);
DEPB(BCOMP);
X ← -500+18*XSIZ;
Y ← TOP-(MODLIN+WINLIN)*YSIZ;
DEP(CONF,2);
DEP(DIFF,1);
DEP(COH,3);
DEP(S0SQ,2);
DEP(N0SQ,2);
DEP(B,1);
DEP(B+TM,1);
DEP(B+TM+TP,1);
X ← -500+18*2*XSIZ;
Y ← TOP-(MODLIN+WINLIN)*YSIZ;
DEP(OPXP,1);
DEP(OPYP,1);
DEP(OPXM,1);
DEP(OPYM,1);
DEP(CX,3);
DEP(CY,3);
X ← -500+18*3*XSIZ;
Y ← TOP-(MODLIN+WINLIN)*YSIZ;
DEP(OPX,1);
DEP(OPY,1);
DEP(LINWID,2);
FRAMES ← FRAMES LOR F9;
DPYOUT(9);
END;
α conversion from Quam format to H/E format;
REQUIRE "PROLOG.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "VIDSUB[1,PDQ]" LOAD_MODULE;
DEFINE Q=⊂'10000⊃;
EXTERNAL INTEGER LINES;
EXT PROCEDURE SUMSUB(INTEGER ARRAY TV; INTEGER O1, O2, O3);
INTEGER SUMPT1, SUMPT2, SUMPT3, TVSIZE, MINV, MAXV;
SIMPLE PROCEDURE Q2HE(SAFE INTEGER ARRAY PIC);
BEGIN
IWID←PIC[SIZEX];
FLINE←PIC[POSY];
LSIDE←PIC[POSX];
RSIDE←LSIDE+IWID-1;
LLINE←FLINE+PIC[SIZEY]-1;
LINLEN←PIC[SIZEL];
BITS←PIC[BIT];
END "Q2HE";
α Conversion from hand-eye library parameters to Quam format picture
header array;
SIMPLE PROCEDURE HE2Q(SAFE INTEGER ARRAY PIC);
BEGIN
PIC[SCALEX]←PIC[SCALEY]←1;
PIC[POSX]←LSIDE;
PIC[POSY]←FLINE;
PIC[SIZEX]←RSIDE-LSIDE+1;
PIC[SIZEY]←LLINE-FLINE+1;
PIC[SIZEL]←HAT(PIC[SIZEX],36 DIV BITS);
PIC[BIT]←BITS;
END "HE2Q";
α BEGINNING OF TVSIX PACKAGE;
SIMPLE PROCEDURE MINMAX(SAFE INTEGER ARRAY PARS);
BEGIN INTEGER NI,NJ;
NI←LINLEN*3;
NJ←PARS[SIZEY];
START_CODE
LABEL LI,LJ;
DEFINE A=⊂1⊃,I=⊂2⊃,J=⊂3⊃,P1=⊂4⊃,P2=⊂5⊃,P3=⊂6⊃;
DEFINE FOO(X)=⊂
ILDB A,X;
CAMGE A,MINV;
MOVEM A,MINV;
CAMLE A,MAXV;
MOVEM A,MAXV;⊃;
MOVE P1,SUMPT1;
MOVE P2,SUMPT2;
MOVE P3,SUMPT3;
MOVE J,NJ;
LJ: MOVE I,NI;
LI: FOO(P1)
FOO(P2)
FOO(P3)
SOJG I,LI;
SOJG J,LJ;
END;
END "MINMAX";
α TVSIX REDUCTION ROUTINE;
SIMPLE PROCEDURE REDUCER(SAFE INTEGER ARRAY PARS);
BEGIN
INTEGER NI,NJ,RPT,LL,SCALE;
SCALE←(64*Q-1)%(MAXV-MINV);
NI←3*LINLEN;
NJ←PARS[SIZEY];
RPT←PARS[PTR];
LL←PARS[SIZEL];
START_CODE
LABEL L,LI;
DEFINE A=⊂1⊃,I=⊂2⊃,J=⊂3⊃,P1=⊂4⊃,P2=⊂5⊃,P3=⊂6⊃,R=⊂7⊃;
DEFINE FOO(X)=⊂
ILDB A,X;
SUB A,MINV;
IMUL A,SCALE;
ASH A,'777764;
IDPB A,R;⊃;
MOVE P1,SUMPT1;
MOVE P2,SUMPT2;
MOVE P3,SUMPT3;
MOVE R,RPT;
MOVE J,NJ;
LI: MOVE I,NI;
L: FOO(P1)
FOO(P2)
FOO(P3)
SOJG I,L;
MOVE R,LL;
ADDB R,RPT;
SOJG J,LI;
END;
END "REDUCER";
α Super fast averager. SUMS and CLPINC determine the number of
averages and clip level ranges;
PROCEDURE SUMMER(INTEGER ARRAY PARS,SUM;INTEGER SUMS,CLPINC);
BEGIN
LINLEN←(PARS[SIZEX]-1)%9+1;
TVSIZE←LINLEN*LINES;
BEGIN INTEGER ARRAY TVBUF[1:TVSIZE];
INTEGER SUMCNT;
SUMPT1←POINT(12,SUM[1,1,1],-1);
SUMPT2←SUMPT1+TVSIZE;
SUMPT3←SUMPT2+TVSIZE;
MINV←1 LSH 34;
MAXV←0;
TVWORD←GIOWD(TVBUF);
FOR SUMCNT←1 STEP 1 UNTIL SUMS DO
BEGIN
TCLIP←0;
BCLIP←CLPINC-1;
WHILE BCLIP ≤ 7 DO
BEGIN
TVIN;
SUMSUB(TVBUF,SUMPT1,SUMPT2,SUMPT3);
TCLIP←TCLIP+CLPINC;
BCLIP←BCLIP+CLPINC;
END;
END;
END;
END "SUMMER";
PROCEDURE TVSIX(SAFE INTEGER ARRAY PARS;INTEGER SUMS,CLPINC);
BEGIN INTEGER ADR, TVSAV;
PARS[SIZEL]←(PARS[SIZEX]-1)%6+1;
TVSAV ← TVWORD;
ADR←(TVWORD+1) LAND '777777;
PARS[PTR]←XPOINT(6,ADR,-1);
PARS[BIT]←6;
Q2HE(PARS);
LINLEN←(PARS[SIZEX]-1)%9+1;
LINES←LLINE-FLINE+1;
BEGIN INTEGER ARRAY SUM[1:3,1:LINES,1:LINLEN];
SUMMER(PARS,SUM,SUMS,CLPINC);
MINMAX(PARS);
REDUCER(PARS);
END;
TVWORD ← TVSAV;
TCLIP ← 0;
BCLIP ← 7;
END "TVSIX";
α read the TV camera as specified;
FORWARD PROCEDURE DBLTV;
PROCEDURE READTV;
BEGIN
IF BITS=4 THEN IF DRES THEN DBLTV ELSE TVIN;
IF BITS=6 THEN
BEGIN INTEGER ARRAY PIC[0:9];
HE2Q(PIC);
TVSIX(PIC,AVE,RANG);
Q2HE(PIC);
END;
END;
α apply operator;
SIMPLE PROCEDURE APLYOP;
BEGIN INTEGER I;
WEAK←NOISY←OPOOB←ISLINE←ISEDGE←BCOMP←FALSE;
COH←S0SQ←N0SQ←B←OPXP←OPYP←OPXM←OPYM←CX←CY←OPX←OPY←LINWID←-1000.0;
TP ← TM ← 0.0;
OPER ← EJLI(WX, WY, I, I);
DOPPAR;
DOPOUT;
END;
α move window pointer by n,m units;
SIMPLE PROCEDURE MOVPTR(INTEGER X,Y);
BEGIN
WX←((WX+X) MIN WR) MAX WL;
WY←((WY+Y) MIN WB) MAX WT;
IF X≠0 THEN
BEGIN
DPYDMP(XO,OUTOCT(WX,5),5);
DPYDMP(XD,OUTDEC(WX,5),5);
END;
IF Y≠0 THEN
BEGIN
DPYDMP(YO,OUTOCT(WY,5),5);
DPYDMP(YD,OUTDEC(WY,5),5);
END;
DPNTR;
END;
α ouput window to DDVID channel;
PROCEDURE WINDOW;
BEGIN SAFE INTEGER ARRAY B[1:20];
DPYSET(B);
AIVECT(0,0);
RVECT(IWID-1,0);
RVECT(0,BMAX-TMAX);
RVECT(-IWID+1,0);
RVECT(0,TMAX-BMAX);
AIVECT(WL-LSMAX,WT-TMAX);
RVECT(0,19);
RVECT(19,0);
RVECT(0,-19);
RVECT(-19,0);
DPYPARS;
OVERL(B,1,1,0,IF ((BMAX-TMAX) MAX (RSMAX-LSMAX))*4< 950
THEN 2 ELSE 1,FALSE);
END;
α disk output;
PROCEDURE WRITEOUT;
BEGIN LABEL REDO;
INTEGER EXTEN, PPN, S, FAIL, I, J;
STRING STR, TITLE, DEFS;
SAFE INTEGER ARRAY STOR[1:25],TIT[1:3];
REDO: OUTSTR("FILE=");
STR ← INCHWL;
TITLE ← "APPLY OUTPUT ";
FOR J←1 STEP 1 UNTIL 3 DO TIT[J]←CVASC(TITLE[(J-1)*5+1 FOR 5]);
STOR[1] ← TVWORD+1;
STOR[5] ← GIOWD(TIT)+1;
SETFORMAT(0,0);
DEFS ← "CAMERA: "&CVS(TVCAM)&CRLF&
"RESOLUTION: "&(IF DRES THEN "DOUBLE" ELSE "NORMAL")&CRLF&
"TCLIP: "&CVS(TCLIP)&CRLF&"BCLIP: "&CVS(BCLIP)&CRLF&
"DAC: "&CVS(DAC)&CRLF;
I ← LENGTH(DEFS);
IF (I MOD 5) THEN MAKSTR(DEFS,((I DIV 5)+1) %5);
I ← LENGTH(DEFS) DIV 5;
BEGIN SAFE INTEGER ARRAY D[1:I];
FOR J←1 STEP 1 UNTIL I DO D[J]←CVASC(DEFS[(J-1)*5+1 FOR 5]);
STOR[6] ← GIOWD(D)+1;
PICWR(1,CVFIL(STR,EXTEN,PPN),EXTEN,PPN,FAIL,STOR);
END;
IF FAIL THEN BEGIN OUTSTR(" WRITE FAILED "); GO TO REDO; END;
END;
α setup TV limits for reading;
INTEGER T_,B_,L_,R_,I_,LL_;
PROCEDURE TODBL;
BEGIN
I_ ← IWID;
LL_ ← LINLEN;
T_ ← FLINE;
B_ ← LLINE;
R_ ← RSIDE;
L_ ← LSIDE;
FLINE ← FLINE+5;
LLINE ← LLINE-5;
RSIDE ← RSIDE-5;
LSIDE ← LSIDE+5;
END;
PROCEDURE FRMDBL;
BEGIN
FLINE ← T_;
LLINE ← B_;
RSIDE ← R_;
LSIDE ← L_;
IWID ← I_;
LINLEN ← LL_;
END;
PROCEDURE ADJTV;
BEGIN
IF DRES THEN TODBL;
TVMOVE;
IF DRES THEN FRMDBL;
END;
α change window limit variables in display;
PROCEDURE WINDUP;
BEGIN
DPYDMP(WTD,OUTDEC(WT,5),5);
DPYDMP(WTO,OUTOCT(WT,5),5);
DPYDMP(WBO,OUTOCT(WB,5),5);
DPYDMP(WBD,OUTDEC(WB,5),5);
DPYDMP(WLD,OUTDEC(WL,5),5);
DPYDMP(WLO,OUTOCT(WL,5),5);
DPYDMP(WRO,OUTOCT(WR,5),5);
DPYDMP(WRD,OUTDEC(WR,5),5);
END;
α read double resolution TV picture;
PROCEDURE DBLTV;
BEGIN INTEGER P1, P2, P3, P4, PT, TVW;
SAFE INTEGER ARRAY T1, T2, T3, T4[1:40];
TODBL;
TVW ← TVWORD;
TVWORD ← GIOWD(T1); HOFF ← VOFF ← FALSE; TVIN;
TVWORD ← GIOWD(T2); HOFF ← TRUE; TVIN;
TVWORD ← GIOWD(T3); HOFF ← FALSE; VOFF ← TRUE; TVIN;
TVWORD ← GIOWD(T4); HOFF ← TRUE; TVIN;
TVWORD ← TVW;
FRMDBL;
VOFF ← HOFF ← FALSE;
P1 ← POINT(4,T1[1],-1);
P2 ← POINT(4,T2[1],-1);
P3 ← POINT(4,T3[1],-1);
P4 ← POINT(4,T4[1],-1);
PT ← XPOINT(4,(TVWORD+1) LAND '777777,-1);
START_CODE
LABEL L1, L2, L3, L4;
MOVE 1,PT;
MOVEI 6,10;
L4: MOVEI 5,1;
MOVE 2,P1;
MOVE 3,P2;
L3: MOVEI 7,10;
L1: ILDB 8,2;
IDPB 8,1;
ILDB 8,3;
IDPB 8,1;
SOJG 7,L1;
MOVEI 1,3;
ADDB 1,PT;
SOJL 5,L2;
MOVE 2,P3;
MOVE 3,P4;
JRST L3;
L2: MOVEI 2,2;
ADDM 2,P1;
ADDM 2,P2;
ADDM 2,P3;
ADDM 2,P4;
SOJG 6,L4;
END;
END;
α move window;
PROCEDURE MOVE_WINDOW;
BEGIN
INTEGER FLG, T, B, L, R, I, TM, BM, LM, RM, TS;
TS ← BITS;
IF CMODE THEN BEGIN TM←LM←0;RM←333;BM←256;ADJTV;END ELSE
BEGIN TM ← TMAX; BM ← BMAX; LM ← LSMAX; RM ← RSMAX; END;
WINDOW;
DO BEGIN "MOV"
IF CMODE THEN TVREAD;
L ← (POTABS(1,FLG)+2048) DIV 12;
T ← (POTABS(2,I)+2048) DIV 18;
IF FLG∨I THEN OUTSTR(" POT ERR ") ELSE
BEGIN "UPDATE"
R ← L+19;
B ← T+19;
IF L<LM THEN R←(L←LM)+19;
IF R>RM THEN L←(R←RM)-19;
IF B>BM THEN T←(B←BM)-19;
IF T<TM THEN B←(T←TM)+19;
IF B≠WB∨T≠WT∨L≠WL∨R≠WR THEN
BEGIN "OK"
WB ← B;
WL ← L;
WR ← R;
WT ← T;
WINDUP;
IF CMODE THEN
BEGIN "TVMOV"
FLINE ← WT;
LLINE ← WB;
RSIDE ← WR;
LSIDE ← WL;
ADJTV;
END "TVMOV" ELSE WINDOW;
END "OK";
END "UPDATE";
END "MOV" UNTIL (I ← INCHRS)≥0;
CHAR ← I;
IF CMODE THEN RELEASE(15);
BITS ← TS;
EJINIT(OPNUM);
INTPNT;
WX ← (WL+WR) DIV 2;
WY ← (WT+WB) DIV 2;
MOVPTR(1,1);
END;
α read a disk file;
PROCEDURE DSKIN;
BEGIN
INTEGER EXTN, PPN, S, I, J, FAIL;
LABEL REDO, ONLY;
STRING STR;
SAFE INTEGER ARRAY STOR, SIZ[1:25];
REDO: OUTSTR("FILE=");
FILE ← INCHWL;
PICINI(1,CVFIL(FILE,EXTN,PPN),EXTN,PPN,FAIL,SIZ);
IF FAIL THEN
BEGIN
OUTSTR("ERROR FOR FILE "&FILE&CRLF);
GO TO REDO;
END;
S ← SIZ[5];
IF S THEN
BEGIN
INTEGER ARRAY TITLE[1:S];
STOR[5] ← GIOWD(TITLE)+1;
PICRD(FAIL,STOR);
STOR[5] ← 0;
STR ← NULL;
FOR I←1 STEP 1 UNTIL S DO STR←STR&CVSTR(TITLE[I]);
OUTSTR("TITLE:"&STR&CRLF);
END;
STR ← NULL;
J ← 0;
FOR I←1 STEP 1 UNTIL 4 DO IF SIZ[I] THEN
BEGIN
STR ← STR&FILTER[I]&",";
J ← J+1;
END;
IF ¬J THEN
BEGIN
OUTSTR("NO PICTURE"&CRLF);
GO TO REDO;
END;
IF J=1 THEN GO TO ONLY;
OUTSTR("PICTURES FOR FILTERS: "&STR&CRLF&"SPECIFY: ");
STR ← INCHWL;
ONLY: J ← STR;
FOR I←1 STEP 1 UNTIL 4 DO IF J=FILTER[I] THEN DONE;
IF I=5 THEN
BEGIN
OUTSTR("NO SUCH FILTER"&CRLF);
GO TO REDO;
END;
RELCOR(TVWORD);
TVWORD ← GETCOR(SIZ[I]);
STOR[I] ← TVWORD+1;
PICRD(FAIL,STOR);
RELEASE(1);
TMAX ← FLINE;
BMAX ← LLINE;
LSMAX ← LSIDE;
RSMAX ← RSIDE;
STVFL ← STV ← ST ← TRUE;
SLIM ← HOFF ← VOFF ← DRES ← CMODE ← FALSE;
WX ← (LSIDE+RSIDE) DIV 2;
WY ← (FLINE+LLINE) DIV 2;
WT ← WY-9;
WB ← WY+10;
WL ← WX-9;
WR ← WX+10;
EJINIT(OPNUM);
INTPNT;
IF (BMAX-TMAX) MAX (RSMAX-LSMAX) > 20 THEN WINDOW;
WINDUP;
END;
α command table
first entry is command character
second entry is argument flag
0 no argument
-1 optional argument
1 required argument
third entry is minimum value of argument, if any
fourth entry is maximum value of argument, if any
fifty entry is default value of argument, if optional
sixth entry is flag bits
1 clear operator display before calling
2 mode display changed
10 call operator after calling
100 read TV after calling
1000 camera mode only
10000 4 bit image mode only
100000 EDGE mode only
;
DEFINE CMDS=⊂
XX( M, 0, 0, 0, 0, '101 ),
XX( ↑, -1, 0, WINLIN, 1, '1 ),
XX( ↓, -1, 0, WINLIN, 1, '1 ),
XX( ←, -1, 0, WINLIN, 1, '1 ),
XX( →, -1, 0, WINLIN, 1, '1 ),
XX( O, -1, 1, 2, 1, '10 ),
XX( C, -1, 1, 4, 1, '103 ),
XX( R, 0, 0, 0, 0, '3 ),
XX( Y, 1, 0, 1, 0, '10 ),
XX( Z, 1, 0, 999, 0, '10 ),
XX( B, 1, 0, 7, 0, '11101 ),
XX( T, 1, 0, 7, 0, '11101 ),
XX( S, 0, 0, 0, 0, '1103 ),
XX( F, 0, 0, 0, 0, '1103 ),
XX( W, 0, 0, 0, 0, '1000 ),
XX( H, 0, 0, 0, 0, '1000 ),
XX( N, 0, 0, 0, 0, '11103 ),
XX( I, 0, 0, 0, 0, '11103 ),
XX( D, -1, 0, 63, 1, '1101 ),
XX( ?, 0, 0, 0, 0, 0 ),
XX( V, 0, 0, 0, 0, 0 ),
XX( T, 0, 0, 0, 0,'100000 ),
XX( E, 0, 0, 0, 0,'100000 ),
XX( A, 0, 0, 0, 0,'100000 ),
XX( X, 0, 0, 0, 0, 0 )
⊃, COMNO=⊂25⊃;
α tables containing the above magic numbers and strings;
DEFINE XX(A,B,C,D,E,F)=⊂"A"⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY COMSTR[1:COMNO];
DEFINE XX(A,B,C,D,E,F)=⊂B⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY ARGFLG[1:COMNO];
DEFINE XX(A,B,C,D,E,F)=⊂C⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY ARGMIN[1:COMNO];
DEFINE XX(A,B,C,D,E,F)=⊂D⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY ARGMAX[1:COMNO];
DEFINE XX(A,B,C,D,E,F)=⊂E⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY ARGDEF[1:COMNO];
DEFINE XX(A,B,C,D,E,F)=⊂F⊃; PRELOAD_WITH CMDS;
SAFE INTEGER ARRAY COMFLG[1:COMNO];
α set up tv camera;
PROCEDURE CAMSET;
BEGIN CMODE ← TRUE;
WX ← 166;
WY ← 128;
TMAX ← WT ← FLINE ← WY-10;
BMAX ← WB ← LLINE ← WY+9;
LSMAX ← WL ← LSIDE ← WX-10;
RSMAX ← WR ← RSIDE ← WX+9;
ST ← SLIM ← 0;
EJINIT(OPNUM);
INTPNT;
END;
α main program begins here;
UNDERFLOW(0);
DAC ← FRAMES ← 0;
BLANKS ← " ";
EDGTST ← SLINK("TRACE")≠-1;
GODDT ← SLINK("DDT");
IF GODDT≤0 THEN GODDT ← 0;
START_CODE
MOVE 1,FRMDDT;
MOVEM 1,COMDDT;
END;
CMNDFLG← TRUE;
DRES ← FALSE;
OPNUM ← TVCAM ← 1;
TCLIP ← 0;
BCLIP ← 7;
CONF ← .90;
DIFF ← 1.5;
FILE ← NULL;
CAMSET;
TVWORD ← GETCOR(100);
OUTSTR("CAMERA INPUT?");
IF INCHWL="Y" THEN
BEGIN "CAMINI"
OUTSTR("CAMERA NUMBER=");
TVCAM ← CVD(INCHWL);
TVIN;
END "CAMINI" ELSE DSKIN;
DPYTYP(TOP-(MODLIN+WINLIN+OPLIN+1)*YSIZ,2,4);
DOUT;
POSPAR;
TVPAR;
DINST;
DMOD;
DOPPAR;
DWIND;
DPNTR;
DPYOFF(F9);
NUMFLG ← INTEG ← FRAC ← FLTPNT ← FRACFLG ← HOFF ← VOFF ← 0;
OUTSTR("READY ");
α command loop - decode input;
LOOP: IF JOBOK(I)≥2 THEN
BEGIN
IF ¬DVDTST THEN
BEGIN DVDTST←TRUE; DMOD; END;
END ELSE IF DVDTST THEN
BEGIN DVDTST←FALSE; DMOD; END;
IF CMODE THEN DPYON(F6) ELSE DPYOFF(F6);
IF ¬LENGTH(CHAR) THEN CHAR ← INCHRW;
I ← CHAR;
CHAR ← NULL;
IF I='15∨I='12∨I=" " THEN GO TO LOOP;
IF I="." THEN
BEGIN
FRACFLG ← 1;
GO TO LOOP;
END;
IF "0"≤I≤"9" THEN
BEGIN "NUMIN"
NUMFLG ← TRUE;
I ← I-"0";
IF FRACFLG THEN
BEGIN "FRACTN"
FRAC ← FRAC*10+I;
FRACFLG ← FRACFLG*10;
END "FRACTN" ELSE INTEG ← INTEG*10+I;
GO TO LOOP;
END "NUMIN" ELSE FLTPNT←IF FRACFLG THEN
INTEG+FRAC/FRACFLG ELSE INTEG;
FOR J←1 STEP 1 UNTIL COMNO DO IF I=COMSTR[J] THEN DONE;
IF J>COMNO THEN
ERR: BEGIN OUTSTR("? "); GO TO NXT; END;
IF ARGFLG[J] THEN
BEGIN "FIXARG"
IF ARGFLG[J]>0∧¬NUMFLG THEN GO TO ERR;
IF ¬NUMFLG THEN INTEG ← FLTPNT ← ARGDEF[J];
IF INTEG<ARGMIN[J] THEN INTEG ← FLTPNT ← ARGMIN[J];
IF INTEG>ARGMAX[J] THEN INTEG ← FLTPNT ← ARGMAX[J];
END "FIXARG";
STATUS ← COMFLG[J];
IF ((STATUS LAND '100000)∧¬EDGTST)∨((STATUS LAND '10000)∧¬(BITS=4))∨
((STATUS LAND '1000)∧¬CMODE) THEN GO TO ERR;
IF STATUS LAND 1 THEN DPYOFF(F8+F9);
α command case statement;
CASE J-1 OF
BEGIN "COMNDS"
"M" MOVE_WINDOW;
"↑" MOVPTR(0,-INTEG);
"↓" MOVPTR(0,INTEG);
"←" MOVPTR(-INTEG,0);
"→" MOVPTR(INTEG,0);
"O" IF NUMFLG∧INTEG≠OPNUM THEN
BEGIN
EJINIT(OPNUM←INTEG);
DPYDMP(DOPNUM,OUTDEC(OPNUM,5),5);
END;
"C" BEGIN "CAMERA"
IF NUMFLG∧INTEG≠TVCAM THEN TVCAM ← INTEG;
IF ¬CMODE THEN
BEGIN "CMODE"
RELCOR(TVWORD);
BITS ← 4;
TVWORD ← GETCOR(100);
DRES ← 0;
CAMSET;
POSPAR;
END "CMODE";
END "CAMERA";
"R" BEGIN DSKIN; POSPAR; DWIND; DPNTR; END;
"Y" CONF ← FLTPNT;
"Z" DIFF ← FLTPNT;
"B" BEGIN BCLIP←INTEG; DPYDMP(BC,OUTDEC(BCLIP,5),6); END;
"T" BEGIN TCLIP←INTEG; DPYDMP(TC,OUTDEC(TCLIP,5),6); END;
"S" BEGIN "SIXBIT"
BITS ← 6;
DRES ← FALSE;
OUTSTR("AVERAGE=");
AVE ← CVD(INCHWL);
OUTSTR("RANGES=");
RANG ← CVD(INCHWL);
INTPNT;
END "SIXBIT";
"F" BEGIN BITS←4;INTPNT;END;
"W" WRITEOUT;
"H" BEGIN "SHOW" INTEGER I;
SAFE INTEGER ARRAY TVW[1:100];
INTEGER BSAV, TSAV;
TSAV ← TVWORD;
BSAV ← BITS;
TVWORD ← GIOWD(TVW);
ADJTV;
DO TVREAD UNTIL (I ← INCHRS)≥0;
CHAR ← I;
RELEASE(15);
TVWORD ← TSAV;
BITS ← BSAV;
END "SHOW";
"N" DRES ← 0;
"I" DRES ← TRUE;
"D" IF TVCAM≠1 THEN GO TO ERR ELSE
BEGIN "DAC"
AUTO_ACC ← (DAC+INTEG) DIV 2;
AD ← DDACO(DAC←IF NUMFLG THEN INTEG ELSE DAC+INTEG);
DPYDMP(DACS,OUTDEC(DAC,5),6);
DPYDMP(ADS,OUTDEC(AD,5),6);
END "DAC";
"?" CMNDFLG ← ¬CMNDFLG;
"V" DDVID("E;→1;"&(IF ((BMAX-TMAX) MAX (RSMAX-LSMAX))*4<950
THEN "↔2" ELSE NULL)&"F1,1;L0");
"T" GO TO NOIMP;
"E" GO TO NOIMP;
"A" BEGIN
NOIMP: OUTSTR("NOT IMPLIMENTED YET ");
GO TO NXT;
END;
"X" IF GODDT THEN
TODDT: BEGIN LABEL L;
ACPOGS(0);
START_CODE
JRST @GODDT;
FRMDDT: JRST L;
END;
L: ACPOGS(FRAMES);
GO TO NXT;
END;
END "COMNDS";
α finish processing commands and return for more input;
IF STATUS LAND '2 THEN DMOD;
IF (STATUS LAND '100) THEN
BEGIN
IF CMODE THEN READTV;
DWIND;
DPNTR;
END;
IF STATUS LAND '10 THEN APLYOP;
NXT: INTEG ← FRAC ← FLTPNT ← FRACFLG ← NUMFLG ← 0;
GO TO LOOP;
END "APPLY";